package com.kxn.multi.module.service.service.impl;

import com.kxn.multi.module.service.entity.Goods;
import com.kxn.multi.module.service.mapper.GoodsMapper;
import com.kxn.multi.module.service.service.GoodsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kxn.multi.module.service.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import com.kxn.multi.module.common.exception.ServiceException;

/**
* <p>
* 产品表 服务实现类
* </p>
*
* @author kxn
* @since 2023-04-03
*/
@Service
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements GoodsService {

    @Autowired
    private PageUtil pageUtil;

    /**
    * 产品表分页列表
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public IPage<Goods> page(Goods param) {

        QueryWrapper<Goods> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
        // 产品名称
                .eq(!StringUtils.isEmpty(param.getName()), Goods::getName, param.getName())
            // 图片
                .eq(!StringUtils.isEmpty(param.getImage()), Goods::getImage, param.getImage())
    ;

        IPage<Goods> page = page(pageUtil.page(), queryWrapper);
        return page;
    }

    /**
    * 产品表详情
    * @param id
    * @return
    */
    @Override
    public Goods detail(Long id) {
        return getById(id);
    }

    /**
    * 产品表新增
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void create(Goods param) {
        if (!save(param)) {
            throw new ServiceException("添加数据失败");
        }
    }

    /**
    * 产品表修改
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void update(Goods param) {
        if (!updateById(param)) {
            throw new ServiceException("更新数据失败");
        }
    }

    /**
    * 产品表修改
    * @param id 主键id
    * @param param 根据需要进行传值
    * @return
    */
    public void updateById(Long id, Goods param) {
        Goods data = this.detail(id);
        if (data == null) {
            throw new ServiceException("数据不存在");
        }
        param.setId(id);
        update(param);
    }

    /**
    * 产品表删除(单个条目)
    * @param id
    * @return
    */
    @Override
    public void delete(Long id) {
        removeById(id);
    }

    /**
    * 产品表删除(多个条目)
    * @param ids
    * @return
    */
    @Override
    public void batchDelete(List<Long> ids) {
        removeByIds(ids);
    }
    }
